package kiwi.assist.dev.guieditor.model {
	import kiwi.assist.dev.guieditor.model.format.NumericFormat;
	import kiwi.assist.dev.guieditor.model.format.StringFormat;

	import flash.display.DisplayObject;
	import flash.utils.Dictionary;

	/**
	 * 描述ui构造的配置
	 * @author zhangming.luo
	 */
	public class UiConfig {
		/**
		 * ui名称
		 */
		public var name : String;
		/**
		 * 实例的类名
		 */
		public var className : String;
		/**
		 * 英文的名称用于导出的时候
		 */
		public var comp : String;
		/**
		 * 相应的工厂类
		 */
		public var factoryClz : *;
		/**
		 * 提供给默认工厂的配置
		 */
		public var defaultConfig : XML;
		/**
		 * 属性队列
		 */
		public var propertyList : Vector.<PropertyConfig> = new Vector.<PropertyConfig>();
		/**
		 * 样式队列
		 */
		public var styleList : Vector.<StyleConfig>=new Vector.<StyleConfig>();
		/**
		 * 实例队列
		 */
		public var instanceMap : Dictionary = new Dictionary();
		/**
		 * 是否隐藏
		 */
		public var hide : Boolean;
		/**
		 * 类型
		 */
		public var type : String;
		/**
		 * 是否固定x,y(一般是容器才有的属性)
		 */
		public var isFixedPosition : Boolean;

		public function UiConfig() {
			var x : PropertyConfig = new PropertyConfig();
			x.key = "x";
			x.format = new NumericFormat();
			x.readOnly = false;
			propertyList.push(x);
			var y : PropertyConfig = new PropertyConfig();
			y.key = "y";
			y.format = new NumericFormat();
			y.readOnly = false;
			propertyList.push(y);
			var name : PropertyConfig = new PropertyConfig();
			name.key = "name";
			name.format = new StringFormat();
			name.readOnly = false;
			propertyList.push(name);
		}

		/**
		 * 高度锁定
		 */
		public function get isFixedHeight() : Boolean {
			return propertyList.some(function(item : PropertyConfig, index : int, array : *) : Boolean {
				return item.key == "height" && item.readOnly;
			});
		}

		/**
		 * 宽度度锁定
		 */
		public function get isFixedWidth() : Boolean {
			return propertyList.some(function(item : PropertyConfig, index : int, array : *) : Boolean {
				return item.key == "width" && item.readOnly;
			});
		}

		public function toString() : String {
			return name;
		}

		private var cnt : int = 0;

		public function generateId(dos : DisplayObject) : String {
			return (++cnt).toString();
		}
	}
}
